package com.mallcai.bigdata.ladon.service.system;

import com.mallcai.bigdata.ladon.dpl.entity.system.User;
import com.mallcai.bigdata.ladon.vo.AuthInfo;
import com.mallcai.bigdata.ladon.vo.UserVo;
import com.mallcai.bigdata.ladon.vo.system.MenuVo;

import java.util.List;
import java.util.Map;

/**
 * Created by oneape<oneape15@163.com>
 * Created 2019-06-09 23:11.
 * Modify:
 */
public interface IAccountService {
    // token原生信息分隔字符串
    static final String TOKEN_INFO_SPLIT = "<@>";
    // token加密密钥
    static final String TOKEN_DES_KEY = "dlb_diLong_2019";
    // 一分钟的毫秒数
    static final long ONE_MINUTE = 60 * 1000;
    // token 失效时间 一个小时(60分钟)
    static final int TOKEN_TIMEOUT = 60;

    /**
     * 根据AppId获取所有用户列表
     *
     * @return List
     */
    List<User> getAllByAppId();

    /**
     * 根据username 查找用户信息
     *
     * @param username String 用户名
     * @return User
     */
    User findByUsername(String username);

    /**
     * 根据token获取用户信息
     *
     * @param token String
     * @return User
     */
    User getUserInfoByToken(String token);

    /**
     * 获取当前用户
     *
     * @return User
     */
    User getCurrentUser();

    /**
     * 用户登录操作
     *
     * @param username String 用户名
     * @param password String 密码
     * @return UserVo
     */
    UserVo login(String username, String password);

    /**
     * 根据条件查询用户列表
     *
     * @param params Map
     * @return List
     */
    List<User> getByParams(Map<String, Object> params);

    /**
     * 添加用户
     *
     * @param user    User
     * @param roleIds List 拥有角色Id
     * @return int
     */
    int addUser(User user, List<Long> roleIds);

    /**
     * 修改用户信息
     *
     * @param user    User
     * @param roleIds List 拥有角色Id
     * @return int
     */
    int updateUser(User user, List<Long> roleIds);

    /**
     * 删除用户信息
     *
     * @param user User
     * @return int
     */
    int deleteUser(User user);

    /**
     * 重置用户密码
     *
     * @param userId Long
     * @return int
     */
    int resetPwd(Long userId);

    /**
     * 修改密码
     *
     * @param oldPwd String
     * @param newPwd String
     * @return int
     */
    int changePwd(String oldPwd, String newPwd);

    /**
     * 获取当前用户的前端菜单列表
     *
     * @return List
     */
    List<MenuVo> getCurrentMenus();

    /**
     * 当前用户是否有写权限,无权限时抛出业务异常
     *
     * @param userId 负责人用户id
     */
    void checkPermission(Long userId);

    /**
     * 注册用户
     *
     * @param user User 用户信息
     * @return int
     */
    int regUser(User user);

    /**
     * 根据邮箱code,激活用户
     *
     * @param emailCode String
     * @return User
     */
    User activateUser(String emailCode);

    /**
     * 判断是否拥有指定角色
     *
     * @param userId   Long   用户id
     * @param roleCode String 角色code
     * @return boolean true - 存在; false - 不存在
     */
    boolean hasRole(Long userId, String roleCode);


    /**
     * 获取用户的权限信息
     *
     * @param userId Long
     * @return AuthInfo
     */
    AuthInfo getUserAuthInfo(Long userId);

    /**
     * 获取用户资源操作权限
     *
     * @param userId Long
     * @return Map
     */
    Map<String, List<Integer>> getResOptPermission(Long userId);

    /**
     * 当前登录用户是超级用户,超级用户不受权限的控制
     *
     * @return boolean
     */
    boolean isSuperMan();

    /**
     * 删除数据库中过期token
     */
    void deleteExpireToken();
}
